package modelo;

import java.util.ArrayList;
import java.util.Iterator;

public abstract class MinaConRetardo extends Mina {	
	private int tiempoFaltante = 3;
	
	public MinaConRetardo(int costo, Casillero unCasillero,int rango) {
		super(costo, unCasillero, rango);
	}
	
	protected int getTiempoFaltante() {
		return this.tiempoFaltante;
	}
	
	protected void setTiempoFaltante(int nuevoTiempoFaltante) {
		this.tiempoFaltante = nuevoTiempoFaltante;
	}
	
	protected void efectuarSobre(Casillero casillero) {
		
		Iterator<Posicionable> iteradorDeContenido = casillero.iteradorDeContenido();
		
		while (iteradorDeContenido.hasNext()) {	 		
			Posicionable actual = iteradorDeContenido.next();
			actual.recibirDisparo(this, casillero);
			if (actual.estaDestruida()) {
				iteradorDeContenido.remove();
				actual.quitarDeTablero();
			}
		}
	}
	
	
	public void recibirDisparo(DisparoDirecto disparo, Casillero casillero) {
		if (!this.estaDestruida()) {
			this.explotar();
			this.setTiempoFaltante(0);
		}
	}
	
	
	public void recibirDisparo(MinaConRetardo mina, Casillero casillero) {
		
	}
	
	
	public void recibirDisparo(MinaContacto mina, Casillero casillero) {
		
	}
	
	public void explotar() {
		ArrayList<Casillero> casillerosImpactados = new ArrayList<Casillero>();
		this.getCasilleroCentral().recibirExplosion(this,this.getRango(), casillerosImpactados);
	}
	
	private void cuentaRegresiva() {
		this.setTiempoFaltante(this.getTiempoFaltante()-1);
		
	}
	
	
	public void actuar() {
		this.cuentaRegresiva();
		if (this.getTiempoFaltante() == 0 ) {
			this.explotar();
		}

	}
	
	public boolean estaDestruida() {
		return (this.getTiempoFaltante() ==  0);
	}
	
	
}
